CloudWatch メトリクスで ECS のCPU使用率が実際の値より低く見えるときの対処方法
困っていた内容
ECS Fargate で稼働しているコンテナアプリの負荷テストを実施しました。使用したサードパーティモニタリングツールでは負荷テスト中のタスク CPU 使用率がほぼ 100% になっていましたが、CloudWatch メトリクスの CPUUtilization は 100% から遠い値 20% 前後でした。
ツールにより多少の差異はあると思いますが、なぜ CloudWatch メトリクスでは低い値なのでしょうか。
どう対応すればいいの?
CloudWatch メトリクスの統計設定を確認してください。
CloudWatch メトリクスでは平均、合計、最小、最大などさまざまな集計方法をサポートしています。また、Fargate を使用した場合に標準で提供される CloudWatch メトリクスは、サービス単位のメトリクスとなります。
そのため、ECS サービスで複数のタスクを実行している場合、統計設定によっては特定タスクの CPU 使用率が 100 % の状態でも、サービス内の他タスクの値と合わせて集計され、想定とは異なる場合があります。
CloudWatch メトリクスを確認する際は、提供されているメトリクスの有効な統計方法をドキュメントから確認し、確認したい値が取得できるように統計設定の変更をお試しください。
Amazon ECS CloudWatch メトリクス - Amazon Elastic Container Service
CPUUtilization
クラスターやサービスで使用されている CPU の割合。
…(中略)…
有効な統計: 平均、最小、最大、合計、サンプル数。最も有用な統計は Average です。
実際にメトリクスを切り替えて確認してみた
統計設定は「グラフ化したメトリクス」タブの2ヶ所ある統計のいずれかから変更します。
今回は②の個別の統計から変更します。
- 見出しの統計:複数のメトリクスをまとめて変更
- 個別の統計:選択したメトリクスの統計を変更
集計方法から「最大」を選択します。
グラフが更新され、CPU 使用率が 100% になっていたことが確認できました。